﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using GUESTSMANAGEMENT.Controller;
using System.Collections.Generic;
using Coolite.Ext.Web;
using System.Net.Mail;
using System.Net.NetworkInformation;
using System.IO;
using System.Threading;


namespace GUESTSMANAGEMENT.View.ListsGuests
{
    public partial class frmListGuests : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public Store GridStore
        {
            get;
            set;
        }

        /*private void executaThread()
        {
        }
         */
        public void EnviarEmail(string emailDestinatario, string nomeDest, gmuser promoter, gmevent evento, int typeInvite,int mailType)
        {

            int FileSize;
            FileStream fs;
            Random randNum = new Random();

            int file = randNum.Next();

            //MySql.Data.MySqlClient.MySqlDataReader myData;
            if (evento.FLSIZE != null && evento.FLSIZE > 0)
            {
                FileSize = (int)evento.FLSIZE;
                //rawData = new byte[FileSize];

                fs = new FileStream(Server.MapPath("Content/Temp/" + file + ".jpg"), FileMode.OpenOrCreate, FileAccess.Write);
                fs.Write(evento.FLEVENT.ToArray(), 0, FileSize);
                fs.Close();
            }
            //File.Delete(Server.MapPath("Content/Temp/" + file + ".jpg"));

            string invite = "";
            switch (typeInvite)
            {
                case 1: 
                    invite = "Bônus Feminino";
                    break;
                case 2: 
                    invite = "Bônus Masculino";
                    break;
                case 3: 
                    invite = "Free Feminino";
                    break;
                case 4: 
                    invite = "Free Masculino";
                    break;
            }

            var fromAddress = new MailAddress("promoter@moom.com.br", "MOOM");
            var toAddress = new MailAddress(emailDestinatario, nomeDest);
            string subject = "Confirmação de nome na lista: " + evento.NMEVENT;
            string excluir = "Seu nome foi adicionado na lista de convidados <br> <br><i>Verifique se seu nome está escrito corretamente</i><br><br>";
            if (mailType == 2)
            {
                subject = "Exclusão de nome na lista: " + evento.NMEVENT;
                excluir = "Seu nome foi removido da lista de convidados <br> ";
            }



            string body = "<HTML> ";

            body += excluir;

            body += "<b>Festa: </b>" + evento.NMEVENT + "<br>" +
            "<b>Data: </b>" + evento.DTEVENT.ToString().Replace("00:00:00", "") + "<br>" +
            "<b>Promoter: </b>" + promoter.NMUSER + "<br>" +
            "<b>Nome: </b>" + nomeDest + "<br>" +
            "<b>Convite: </b>" + invite + "<br>" +
            "<b>Válido até: </b>" + evento.TMEXPIRE.ToString().Substring(0, evento.TMEXPIRE.ToString().Length-3) +  " Hs.<br>" +
            "<b>EU ESTOU NA MOOM. E A MOOM ESTÁ EM MIM.</b><br>";


            if (mailType != 2)
            {
                body += "<br>Não é necessário a apresentação deste no dia do evento.";

            }

            body += "<br><br><i>Mensagem automática, não é necessário responder.</i>";
            body += "</HTML>";
            
            System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(fromAddress, toAddress);
            
            mail.IsBodyHtml = true;
            mail.Subject = subject;
            mail.Body = body;

            if (mailType != 2)
            {
                if (evento.FLSIZE != null && evento.FLSIZE > 0)
                {
                    Attachment att = new Attachment(Server.MapPath("Content/Temp/" + file + ".jpg"));
                    mail.Attachments.Add(att);
                }
            }
            else
            {
                var cco = new MailAddress("caixa@moom.com.br", "Caixa");
                //message.CC.Add(cco);
                mail.Bcc.Add(cco);
            }

            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
            smtp.Host = "smtp.moom.com.br";
            smtp.Port = 25;
            smtp.Credentials = new System.Net.NetworkCredential("promoter@moom.com.br", "moom01");

            try
            {
                smtp.Send(mail);
            }
            catch (System.Net.Mail.SmtpException e)
            {
                Ext.Msg.Alert("Alerta!", "Ocorreu um erro Ao enviar email! Tente novamente!" + e.Message).Show();
            }
            mail.Dispose();

            /*
            var fromAddress = new MailAddress("eventos@moom.com.br", "MOOM");
            var toAddress = new MailAddress(emailDestinatario, nomeDest);
            
            string subject = "Confirmação de nome na lista: " + evento.NMEVENT;
            string excluir = "Seu nome foi adicionado na lista de convidados <br> ";
            if (mailType == 2)
            {
                 subject = "Exclusão de nome na lista" + evento.NMEVENT;
                 excluir = "Seu nome foi removido da lista de convidados <br> ";
            }

           

            string body = "<HTML> ";
            
            body += excluir;
            
            body += "<b>Festa: </b>" + evento.NMEVENT + "<br>" +
            "<b>Data: </b>" + evento.DTEVENT.ToString().Replace("00:00:00", "") + "<br>" +
            "<b>Promoter: </b>" + promoter.NMUSER + "<br>" +
            "<b>Nome: </b>" + nomeDest + "<br>" +
            "<b>Convite: </b>" + invite + "<br>" +
            "<b>EU ESTOU NA MOOM. E A MOOM ESTÁ EM MIM</b><br>";
            
            
            if (mailType != 2)
            {
            body += "<br>Não é necessário a apresentação deste no dia do evento.";
            
            }

            body += "</HTML>";

            
        
            var smtp = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Credentials = new System.Net.NetworkCredential("moomeventos@gmail.com", "mico1010")
            };
            var message = new MailMessage();
            message.To.Add(toAddress);
            message.From=fromAddress;
            message.Subject = subject;
            message.Body = body;
            message.IsBodyHtml = true;
            if (mailType != 2)
            {
                Attachment att = new Attachment(Server.MapPath("Content/Temp/" + file + ".jpg"));
                message.Attachments.Add(att);
            }
            else
            {
                var cco = new MailAddress("caixa@moom.com.br", "Caixa");
                message.CC.Add(cco);
                message.Bcc.Add(cco);
            }

            try
            {
                smtp.Send(message);
            }
            catch (System.Net.Mail.SmtpException e)
            {
                Ext.Msg.Alert("Alerta!", "Ocorreu um erro Ao enviar email! Tente novamente!" + e.Message).Show();
            }
            */

            /*using (var message = new MailMessage(fromAddress, toAddress)
            {
                Subject = subject,
                Body = body,
                IsBodyHtml = true,
            })
            {

                if (mailType != 2)
                {
                    Attachment att = new Attachment(Server.MapPath("Content/Temp/" + file + ".jpg"));
                    message.Attachments.Add(att);
                }
                try
                {
                    smtp.Send(message);
                }catch(System.Net.Mail.SmtpException e){
                    Ext.Msg.Alert("Alerta!", "Ocorreu um erro Ao enviar email! Tente novamente!" + e.Message).Show();
                }
            }*/ 
        }

        protected void FormSave(object sender, AjaxEventArgs e)
        {

            //this.EnviarEmail("leandrodiegomota@gmail.com", "MOOM Ninja", "Ai sim... fomos surpreendidos novamente!!!");
            
            try
            {
                using (guestsmanagementEntities cont = new guestsmanagementEntities())
                {
                    int eve = (int)Session["eventId"];
                    gmevent evento = Controller.Event.getByEvent(eve);

                    gmlistguests guest = Controller.GuestsList.getByListsGuestMail(this.listGuestsEmail.Text.ToString(), (int)evento.CDEVENT);

                    int cdUser = Convert.ToInt32(Session["userCd"]);
                    gmuser user = Controller.User.getByUser(cdUser);

                    gmeventuser eventUser = (from eventuser in cont.gmeventuser
                                             where eventuser.gmuser.CDUSER == cdUser && eventuser.gmevent.CDEVENT == evento.CDEVENT
                                             select eventuser).FirstOrDefault();

                    string teste = evento.DTEVENT.ToString().Replace("00:00:00", evento.TMLIST.ToString());

                    DateTime date = Convert.ToDateTime(teste);
                    if (!((DateTime.Compare(DateTime.Now, date)) >= 0))
                    {

                        if (guest == null)
                        {
                            int typeInvite = int.Parse(this.cmbGuestInvite.SelectedItem.Value);
                            int qtdInvite = 0;
                            string msg = "";

                            List<gmlistguests> listGuestsInvites = Controller.GuestsList.getByListsGuestsInvites((int)evento.CDEVENT, cdUser, typeInvite);

                            switch (typeInvite)
                            {
                                case 1: qtdInvite = (int)eventUser.QTBF;
                                    msg = "Bônus Feminino";
                                    break;
                                case 2: qtdInvite = (int)eventUser.QTBM;
                                    msg = "Bônus Masculino";
                                    break;
                                case 3: qtdInvite = (int)eventUser.QTFF;
                                    msg = "Free Feminino";
                                    break;
                                case 4: qtdInvite = (int)eventUser.QTFM;
                                    msg = "Free Masculino";
                                    break;
                            }

                            if ((qtdInvite - listGuestsInvites.Count) > 0)
                            {
                                using (guestsmanagementEntities context = new guestsmanagementEntities())
                                {
                                    gmlistguests listGuests = new gmlistguests();
                                    listGuests.NMGUEST = this.listGuestsName.Text.ToString();
                                    listGuests.NMMAILGUEST = this.listGuestsEmail.Text.ToString();
                                    listGuests.FGTYPEINVITE = int.Parse(this.cmbGuestInvite.SelectedItem.Value.ToString());
                                    listGuests.GMEVENT_CDEVENT = evento.CDEVENT;
                                    listGuests.GMUSER_CDUSER = user.CDUSER;
                                    Controller.GuestsList.addListsGuests(listGuests);
                                    //EnviarEmail(this.listGuestsEmail.Text.ToString(), this.listGuestsName.Text.ToString(), user, evento, int.Parse(this.cmbGuestInvite.SelectedItem.Value.ToString()) ,1);
                                    EnviarEmail(this.listGuestsEmail.Text.ToString(), this.listGuestsName.Text.ToString(), user, evento, int.Parse(this.cmbGuestInvite.SelectedItem.Value.ToString()), 1);
                                    ClearWindow(Controls);
                                    this.GridStore.AddScript(string.Format("{0}.reload();", this.GridStore.ClientID));

                                    FormStatusBar.SetStatus(new StatusBarStatusConfig { Text = "Cadastro efetuado com sucesso!", IconCls = "", Clear2 = true });
                                }
                            }
                            else
                            {
                                Ext.Msg.Alert("Alerta!", "Quantidade de <b>" + msg + "</b> Esgotado!").Show();
                            }

                        }
                        else
                        {
                            gmuser promoter = Controller.User.getByUser((int)guest.GMUSER_CDUSER);
                            Ext.Msg.Alert("Alerta!", "Convidado já cadastrado para este evento pelo Promoter <b>" + promoter.NMUSER + "</b> <br>Nome: <b>" + guest.NMGUEST + "</b> <br>Email: <b>" + guest.NMMAILGUEST + "</b>").Show();
                        }
                    }
                    else
                    {
                        Ext.Msg.Alert("Alerta!", "Tempo limite para inclusão de convidados esgotou!").Show();
                    }
                }
            }
            catch (System.Exception msg)
            {
                Ext.Msg.Alert("Alerta!", "Ocorreu um erro durante a transação! Tente novamente!"+msg.Message).Show();
            }
            ClearWindow(Controls);
        }

        protected void Close(object sender, AjaxEventArgs e)
        {
            this.winListGuests.Hide();
            ClearWindow(Controls);
        }

        public void ClearWindow(ControlCollection AllControls)
        {
            foreach (Control c in AllControls)
            {
                if (c is TextField)
                {
                    ((TextField)c).Text = "";
                }
                if (c is ComboBox)
                {
                    ((ComboBox)c).Value = null;
                }
                if (c is Checkbox)
                {
                    ((Checkbox)c).Checked = true;
                }
                if (c is Hidden)
                {
                    ((Hidden)c).Text = "";
                }
                ClearWindow(c.Controls);
            }
        }
    }
}